package edu.hunau.cxb19.oop.class18.generic;

import java.util.Arrays;

/**
 *
 * @author hb
 *
 *         2020-03-18 15:46:42
 */
public class MyArrayList<E> implements MyList<E> {
	// 底层存储数据的数组
	private E[] arr;
	// 表示底层数组中实际存储的数据
	private int size;

	/**
	 * 
	 */
	public MyArrayList() {
		super();
		this.arr = (E[]) new Object[5];
	}

	/**
	 * @param elemetData
	 */
	public MyArrayList(int newLength) {
		super();
		this.arr = (E[]) new Object[newLength];
	}

	/**
	 * 将数据添加到集合中
	 * 
	 * @param element
	 */
	public void add(E element) {
		// 判定是否需要扩容
		if (size == arr.length) {
			// 序号扩容
			this.arr = Arrays.copyOf(arr, (int) (arr.length * 1.2));
		}
		arr[size++] = element;
	}

	/**
	 * 对指定下标的元素进行设置，返回久的元素
	 * 
	 * @param index
	 * @param newElement
	 * @return
	 */
	public E set(int index, E newElement) {
		checkIndex(index);
		E oldElement = (E) arr[index];
		// 设置新的元素
		arr[index] = newElement;
		return oldElement;
	}

	/**
	 * 根据下标获得对应的数据
	 * 
	 * @param index
	 * @return
	 */
	public E get(int index) {
		// 判定index的有效性
		checkIndex(index);
		return arr[index];
	}

	public void checkIndex(int index) {
		if (index < 0 || index > size - 1) {
			throw new ArrayIndexOutOfBoundsException();
		}
	}

	/**
	 * @return the size
	 */
	public int size() {
		return size;
	}

}
